package cn.aws360.boot.system.biz.service;

import cn.aws360.boot.data.api.pojo.request.PageQuery;
import cn.aws360.boot.data.api.pojo.response.PageResult;
import cn.aws360.boot.system.api.pojo.request.SysDictQuery;
import cn.aws360.boot.system.api.pojo.request.SysDictWrite;
import cn.aws360.boot.system.api.pojo.response.SysDictItemModel;
import cn.aws360.boot.system.api.pojo.response.SysDictModel;
import cn.aws360.boot.system.biz.domain.SysDict;
import com.baomidou.mybatisplus.extension.service.IService;

import java.util.List;
import java.util.Map;

/**
 * @author junnan
 */
public interface SysDictService extends IService<SysDict> {

    /**
     * 新增字典
     *
     * @param sysDictWrite 新增字典参数
     * @return 是否成功
     */
    Boolean add(SysDictWrite sysDictWrite);

    /**
     * 修改字典
     *
     * @param sysDictWrite 修改字典参数
     * @return 是否成功
     */
    Boolean edit(SysDictWrite sysDictWrite);

    /**
     * 删除字典
     *
     * @param ids 删除字典 ids
     * @return 是否成功
     */
    Boolean remove(String ids);

    /**
     * 查询字典详情
     *
     * @param id 查询字典 id
     * @return SysDictModel
     */
    SysDictModel detail(Integer id);

    /**
     * 查询字典列表
     *
     * @param sysDictQuery 查询字典参数
     * @return List<SysDictModel>
     */
    List<SysDictModel> findList(SysDictQuery sysDictQuery);

    /**
     * 查询字典分页
     *
     * @param sysDictQuery 查询字典参数
     * @param pageQuery    查询分页参数
     * @return PageResult<SysDictModel>
     */
    PageResult<SysDictModel> findPage(SysDictQuery sysDictQuery, PageQuery pageQuery);

    /**
     * 刷新字典子项缓存
     *
     * @return 是否成功
     */
    Boolean refreshCache();

    /**
     * 根据字典编码获取子项列表
     *
     * @param code 字典编码
     * @return List<SysDictItemModel>
     */
    List<SysDictItemModel> findItemSelByCode(String code);

    /**
     * 根据字典编码获取子项映射
     *
     * @param code 字典编码
     * @return Map<Integer, String>
     */
    Map<Integer, String> findItemMapByCode(String code);

}
